/**
 * 
 */

package com.gustozzi.distribucion.action;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.gustozzi.distribucion.action.util.Constantes;
import com.gustozzi.distribucion.dao.util.DataAccessExceptions;
import com.gustozzi.distribucion.negocio.SolicitudTransporteBO;
import com.gustozzi.distribucion.negocio.TransporteBO;
import com.gustozzi.distribucion.negocio.impl.SolicitudTransporteBOImpl;
import com.gustozzi.distribucion.negocio.impl.TransporteBOImpl;
import com.gustozzi.domain.Despacho;
import com.gustozzi.domain.ReservaTransporte;
import com.gustozzi.domain.SolicitudTransporte;
import com.gustozzi.domain.Transporte;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author FABRIZIO
 * 
 */
public class ReservaTransporteAction extends ActionSupport implements ServletRequestAware
{
    private static final long serialVersionUID = 1L;
    TransporteBO transporteBO = new TransporteBOImpl();
    private String botonSeleccionado;
    private HttpServletRequest request;
    private boolean indicadorConsulta;
    private ActionContext context;
    private Map<String, Object> appCon;
    private String codigoSeleccionado;
    private ReservaTransporte reservaTransporte;
    private ReservaTransporte reservaTransporteBusqueda;
    private List<ReservaTransporte> listaReservaTransporte;
    private List<Transporte> listaTransporte;
    private Transporte transporte;

    public String getCodigoSeleccionado()
    {
        return codigoSeleccionado;
    }

    public void setCodigoSeleccionado(String codigoSeleccionado)
    {
        this.codigoSeleccionado = codigoSeleccionado;
    }

    public Transporte getTransporte()
    {
        return transporte;
    }

    public void setTransporte(Transporte transporte)
    {
        this.transporte = transporte;
    }

    public String execute()
    {
        String destino = Constantes.CADENA_VACIA;
        if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_FILTRAR))
        {
            destino = obtenerListaReserva();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_REPORTE))
        {
            destino = null;
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_NUEVO))
        {
            destino = nuevaReserva();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_CONSULTAR_TRANSPORTE))
        {
            destino = obtenerListaTransporte();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_ELIMINAR))
        {
            destino = eliminarDespacho();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_GUARDAR))
        {
            destino = guardarReservaTransporte();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_EDITAR))
        {
            destino = editarDespacho();
        }

        else
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String eliminarDespacho()
    {
        String destino = Constantes.CADENA_VACIA;
        String respuesta;
        String codigoDespachoEliminar = codigoSeleccionado;
        try
        {
            respuesta = transporteBO.eliminarReservaTransporte(codigoDespachoEliminar);

            if (respuesta.equalsIgnoreCase("OK"))
            {
                destino = "CONSULTARRESERVATRANSPORTE";
            }
            else
            {
                destino = Constantes.ERROR;
            }
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String editarDespacho()
    {
        String destino = "";

        try
        {
            this.codigoSeleccionado = codigoSeleccionado.replaceAll(", 1", " ").trim();
            context = ActionContext.getContext();
            appCon = context.getApplication();
            listaReservaTransporte = (List<ReservaTransporte>) appCon.get("listaReservaTransporte");
            listaTransporte = transporteBO.obtenerListaTransporteReserva();
            System.out.println("listaTransporte>>>" + listaTransporte.size());
            this.setListaTransporte(listaTransporte);

            String codigoSolicitud = codigoSeleccionado;

            for (int x = 0; x < listaReservaTransporte.size(); x++)
            {

                if (listaReservaTransporte.get(x).getCodigoReserva().equals(codigoSolicitud))
                {

                    reservaTransporteBusqueda = listaReservaTransporte.get(x);
                    listaTransporte.add(reservaTransporteBusqueda.getTrans());

                }
            }
            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("reservaTransporteBusqueda", reservaTransporteBusqueda);

            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaTransporte", listaTransporte);
            destino = "NUEVARESERVATRANSPORTE";

        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    private String obtenerListaTransporte()
    {

        String destino = "";
        try
        {

            reservaTransporteBusqueda.setCodigoReserva("TEMP");
            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("reservaTransporteBusqueda", reservaTransporteBusqueda);
            listaTransporte = transporteBO.obtenerListaTransporteReserva();
            System.out.println("listaTransporte>>>" + listaTransporte.size());
            this.setListaTransporte(listaTransporte);

            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaTransporte", listaTransporte);
            destino = Constantes.NUEVARESERVATRANSPORTE;

        }
        catch (Exception e)
        {
            destino = "ERROR";
        }

        return destino;

    }

    private String obtenerListaReserva()
    {
        String destino = "";
        List<ReservaTransporte> listaReservaTransporte = null;
        try
        {
            String codigoReserva = reservaTransporteBusqueda.getCodigoReserva();
            String placa = reservaTransporteBusqueda.getTrans().getPlaca();
            String fechaDesde = reservaTransporteBusqueda.getFechaReservaDesde();
            String fechaHasta = reservaTransporteBusqueda.getFechaReservaHasta();
            listaReservaTransporte = new ArrayList<ReservaTransporte>();
            listaReservaTransporte = transporteBO
                    .obtenerReservaTransporte(codigoReserva, fechaDesde, fechaHasta, placa);
            System.out.println("LISTA SIZE" + listaReservaTransporte.size());
            this.setListaReservaTransporte(listaReservaTransporte);
            if (listaReservaTransporte.size() > 0)
                indicadorConsulta = false;
            else
                indicadorConsulta = true;
            System.out.println("indicadorConsulta" + indicadorConsulta);
            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaReservaTransporte", listaReservaTransporte);
            destino = Constantes.CONSULTARRESERVATRANSPORTE;
        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    public String nuevaReserva()
    {

        reservaTransporteBusqueda.setCodigoReserva("TEMP");

        String destino = Constantes.NUEVARESERVATRANSPORTE;
        try
        {
            listaTransporte = transporteBO.obtenerListaTransporteReserva();
            System.out.println("listaTransporte>>>" + listaTransporte.size());
            this.setListaTransporte(listaTransporte);

            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaTransporte", listaTransporte);

        }
        catch (DataAccessExceptions e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        destino = Constantes.NUEVARESERVATRANSPORTE;
        return destino;
    }

    public String guardarReservaTransporte()
    {
        String destino = Constantes.CADENA_VACIA;
        String respuesta = Constantes.CADENA_VACIA;

        try
        {

            System.out.println("codigoTrans");
            String codigo = reservaTransporteBusqueda.getCodigoReserva();
            System.out.println("codigo" + codigo);
            SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
            String fechaReq = sdf.format(reservaTransporteBusqueda.getFechaRequerimiento()).toString();
            String fechaReserva = sdf.format(reservaTransporteBusqueda.getFechaReserva()).toString();
            String codigoTrans = "";
            // String codigoTrans = codigoSeleccionado;

            /*
             * if (codigo.equals("TEMP"))
             * codigoTrans=codigoSeleccionado.replaceAll(","," ").trim(); else
             * codigoTrans=codigoSeleccionado.replaceAll(", 1"," ").trim();
             */

            codigoTrans = codigoSeleccionado.substring(0, codigoSeleccionado.indexOf(",")).trim();

            System.out.println("codigoTrans" + codigoTrans);

            respuesta = transporteBO.guardarReservaTransporte(codigo, codigoTrans, fechaReq, fechaReserva);
            reservaTransporteBusqueda = null;

            if (respuesta.equalsIgnoreCase(Constantes.ERROR))
            {
                destino = Constantes.ERROR;
            }
            else
            {

                destino = Constantes.CONSULTARRESERVATRANSPORTE;

            }
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    @Override
    public void setServletRequest(HttpServletRequest request)
    {
        this.request = request;
    }

    /**
     * @return the botonSeleccionado
     */
    public String getBotonSeleccionado()
    {
        return botonSeleccionado;
    }

    public void setBotonSeleccionado(String botonSeleccionado)
    {
        this.botonSeleccionado = botonSeleccionado;
    }

    public ReservaTransporte getReservaTransporte()
    {
        return reservaTransporte;
    }

    public void setReservaTransporte(ReservaTransporte reservaTransporte)
    {
        this.reservaTransporte = reservaTransporte;
    }

    public ReservaTransporte getReservaTransporteBusqueda()
    {
        return reservaTransporteBusqueda;
    }

    public void setReservaTransporteBusqueda(ReservaTransporte reservaTransporteBusqueda)
    {
        this.reservaTransporteBusqueda = reservaTransporteBusqueda;
    }

    public List<ReservaTransporte> getListaReservaTransporte()
    {
        return listaReservaTransporte;
    }

    public void setListaReservaTransporte(List<ReservaTransporte> listaReservaTransporte)
    {
        this.listaReservaTransporte = listaReservaTransporte;
    }

    public boolean isIndicadorConsulta()
    {
        return indicadorConsulta;

    }

    public void setIndicadorConsulta(boolean indicadorConsulta)
    {
        this.indicadorConsulta = indicadorConsulta;
    }

    public List<Transporte> getListaTransporte()
    {
        return listaTransporte;
    }

    public void setListaTransporte(List<Transporte> listaTransporte)
    {
        this.listaTransporte = listaTransporte;
    }

}